package cn.iocoder.yudao.module.brokerage.user.pojo.po;

import cn.iocoder.yudao.framework.business.basic.pojo.po.MemberScopeEntity;
import cn.iocoder.yudao.module.api.brokerage.level.enums.BrokerageLevelTypeEnum;
import cn.iocoder.yudao.module.api.brokerage.user.enums.BrokerageLevelWeightEnum;
import cn.iocoder.yudao.module.api.member.agency.enums.AgencyLevelEnum;
import cn.iocoder.yudao.module.api.member.vip.enums.VipLevelEnum;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.Objects;

/**
 * <pre>
 * OOoO0OOoO0OOOooo0oOOOO0OOOOO0oooOO0ooOOO0Ooooo0OOOOo0ooooO0OOooo0Ooooo0OOOOO
 *  推广用户 DO
 * OOoO0OOoO0OOOooo0oOOOO0OOOOO0oooOO0ooOOO0Ooooo0OOOOo0ooooO0OOooo0Ooooo0OOOOO
 * </pre>
 *
 * @author 山野羡民（1032694760@qq.com）
 * @since 2025/01/17
 */
@Data
@TableName(value = "brokerage_user", autoResultMap = true)
//@KeySequence("brokerage_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
public class BrokerageUserDO extends MemberScopeEntity {

    /**
     * 类型：0-普通用户、1-会员、2-招商人员、3-商家
     *
     * @see BrokerageLevelTypeEnum
     */
    private Integer type;
    @TableField(exist = false)
    private String typeName;

    public String getTypeName() {
        return BrokerageLevelTypeEnum.valueOf(getType()).getName();
    }

    /**
     * 父级用户编号
     */
    private Long fatherUserId;

    /**
     * 祖级用户编号
     */
    private Long grandpaUserId;

    /**
     * 关系路径，如“1,2,5”，结合FIND_IN_SET用于无限级
     */
    private String relationPath;

    /**
     * 邀请人数
     */
    private Integer inviteCount;

    /**
     * 累计业绩金额，单位为分
     */
    private Integer achievementPrice;

    /**
     * 累计分佣金额，单位为分
     */
    private Integer bonusMoney;

    /**
     * 累计贡献值
     */
    private Integer bonusGrowth;

    /**
     * 等级权重
     */
    private Integer levelWeight;
    @TableField(exist = false)
    private String levelWeightName;

    @SuppressWarnings("unused")
    public String getLevelWeightName() {
        if (Objects.equals(getType(), BrokerageLevelTypeEnum.VIP.getValue())) {
            return VipLevelEnum.valueOf(getLevelWeight()).getName();
        }
        if (Objects.equals(getType(), BrokerageLevelTypeEnum.AGENCY.getValue())) {
            return AgencyLevelEnum.valueOf(getLevelWeight()).getName();
        }
        return BrokerageLevelWeightEnum.valueOf(getLevelWeight()).getName();
    }

    /**
     * 开关
     */
    private Boolean enabled;

    /**
     * 用户别名（推广者可改）
     */
    private String userAlias;

    /**
     * 用户手机号（推广者可改）
     */
    private String userMobile;

    /**
     * 用户单位（推广者可改）
     */
    private String userCompany;

    /**
     * 用户位置（推广者可改）
     */
    private String userLocation;

}